package com.hrbxlh.dao;

import org.springframework.stereotype.Repository;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Repository
public interface TeaStatisticsDao {

    /**
     *正在学习人数（未结课的 OR 已结课的）
     * @param paramMap 教师id
     * @return  课程对应的学生数集合
     * @throws Exception
     */
     List<Map<String,Object>> getLearningStuCountByTeaId(Map<String, Object> paramMap) throws Exception;

    /**
     * @description 当前教师所教学生总数（按课程）
     * @param 教师id
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getStuCountList(Map<String, Object> paramMap) throws Exception;

    /**
     * @description 查询某个教师教的学生实验时长总和（课程id为条件）
     * @param 课程id
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getExpreLongList(Map<String, Object> paramMap) throws Exception;

    /**
     * @description 查询当前教师教的学生总数
     * @param 课程id
     * @return
     * @throws Exception
     */
    Integer getStudentTotalCount(Map<String, Object> paramMap) throws Exception;

    /**
     * @description 查询某个教师下所教学生成绩总和（按课程为条件）
     * @param 课程id
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getexamSumList(Map<String, Object> paramMap) throws Exception;

    /**
     * @description 查询当前登陆人教的学生
     * @param 教师id
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getStuList(Map<String, Object> paramMap) throws Exception;

    /**
     * @description 查询当前登陆人教的学生及格的学生数
     * @param
     * */
    List<Map<String,Object>> getPassExamCount(Map<String, Object> paramMap);

    /**
     * 查询某个人的排课时间段及排课节数
     * @param paramMap
     * @return
     */
    Map<String,Object> getRelationTime(Map<String, Object> paramMap);

    /**
     * @description 查询当前登陆人教的学生提交的实验数
     * @param
     * */
    List<Map<String,Object>> getPassExpreCount(Map<String, Object> paramMap);

    /**
     * @description 查询教师一共教过多少班级、一共教过多少人、批改实验报告数、批改作业数、某班级人数
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getTeacherTeaSituation(Map<String, Object> paramMap);

    /**
     * 提交的作业or实验报告数
     * @param paramMap
     * @return
     */
    Map<String, Object> getSubmitHomeOrTestCount(Map<String, Object> paramMap);

    /**
     * 课程详情
     *正在学习人数（未结课的 OR 已结课的）
     * @param paramMap 教师id、课程id
     * @return  课程对应的学生数集合
     * @throws Exception
     */
     List<Map<String,Object>> getLearningStuClassByCouId(Map<String, Object> paramMap) throws Exception;

    /**
     * 课程详情
     * @description 当前教师所教学生总数（按班级）
     * @param 教师id、课程id
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getStuClassListByCouId(Map<String, Object> paramMap) throws Exception;

    /**
     * 课程详情
     * @description 查询某个教师教的学生实验时长总和（课程id为条件）（按班级）
     * @param 教师id、课程id
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getExpreLongListByCouId(Map<String, Object> paramMap) throws Exception;

    /**
     * 课程详情
     * @description 查询某个教师下所教学生成绩总和（按课程为条件/按班级）
     * @param 课程id 教师id、
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getexamSumListByCouId(Map<String, Object> paramMap) throws Exception;

    /**
     * 课程详情
     * @description 查询当前登陆人教的学生及格的学生数
     * @param
     * */
    List<Map<String,Object>> getDetailPassExamCount(Map<String, Object> paramMap);

    /**
     * 课程详情
     * @description 查询当前登陆人教的学生提交的实验数
     * @param
     * */
    List<Map<String,Object>> getDetailPassExpreCount(Map<String, Object> paramMap);

    /**
     * 课程详情
     * @description 查询教师一共教过多少班级、一共教过多少人、批改实验报告数、批改作业数、某班级人数
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getDetailTeacherTeaSituation(Map<String, Object> paramMap);

    /**
     * 学生统计
     * @description 查询当前登陆人所教的学生及对应的课程
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getStuAndCouList(Map<String, Object> paramMap);

    /**
     * 学生统计
     * @description 通过stuAndCouList中的人员id和课程id为条件查询实验总时长
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getExpreStuList(Map<String, Object> paramMap);

    /**
     * 学生统计
     * @description 通过stuAndCouList中的人员id和课程id为条件查询问题和回答合并在一起
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getProAndAnswerStuList(Map<String, Object> paramMap);

    /**
     * 学生统计
     * @description 通过stuAndCouList中的人员id和课程id为条件查询提交作业数or实验报告数
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> geTaskOrExperStuList(Map<String, Object> paramMap);

    /**
     * 学生统计
     * @description 通过stuAndCouList中的人员id和课程id为条件查询实验笔记数
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> geExperNotStuList(Map<String, Object> paramMap);

    /**
     * 学生统计
     * @description 通过stuAndCouList中的人员id和课程id为条件查询平时成绩、考试成绩、总成绩、学生姓名、
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> geSourceStuList(Map<String, Object> paramMap);

    /**
     * 学生统计--详情
     * @description 点击详情显示每门课程的课程成绩分数、当前课程排名。每个章节的课程成绩（平时成绩）、班级平均成绩。
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getStuChapterSourceList(Map<String, Object> paramMap);

    /**
     * 学生统计--详情
     * @description 查询当前学生所在班级当前课程每章节的总分数
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getAllChapterSourceList(Map<String, Object> paramMap);

    /**
     * 学生统计--详情
     * @description 查询当前学生所在班级人数
     * @param 班级id、课程id
     */
    public BigDecimal getStuCount(Map<String, Object> paramMap);

    /**
     * 学生统计--详情
     * @description 查询当前学生每章节实验时长
     * @param 班级id 学生d
     * */
    List<Map<String, Object>> getStuChapterExperLongList(Map<String, Object> paramMap);

    /**
     * 学生统计--详情
     * @description 查询当前学生所在班级当前课程每章节的总实验时长
     * @param 班级id 课程id
     * */
    List<Map<String, Object>> getAllStuChapterExperLongList(Map<String, Object> paramMap);

    /**
     * 学生统计
     * @description 查询当前教师所教的班级
     * @param 教师id
     * */
    List<Map<String, Object>> getAllClassListByTeaId(Map<String, Object> paramMap);

    /**
     * 教师端--学生学习报告列表
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> getAllStuReportByTeaId(Map<String, Object> paramMap);

    /**
     * 学生报告
     * @description 通过学号查询某个学生每个课程的实验时长
     * @param 学生id
     * */
    List<Map<String, Object>> getExpreByStuId(Map<String, Object> paramMap);

    /**
     * 学生报告
     * @description 通过学号查询某个学生每个课程的问题和回答合并在一起
     * @param 学生id
     * */
    List<Map<String, Object>> getProAndAnswerByStuId(Map<String, Object> paramMap);

    /**
     * 学生报告
     * @description 通过学号查询某个学生每个课程的提交作业数or实验报告数
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> geTaskOrExperByStuId(Map<String, Object> paramMap);

    /**
     * 学生报告
     * @description 通过学号查询某个学生每个课程的查询实验笔记数
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> geExperNotByStuId(Map<String, Object> paramMap);

    /**
     * 学生报告
     * @description 通过学号查询某个学生每个课程的平时成绩、考试成绩、总成绩、学生姓名、
     * @param 班级id 教师id
     * */
    List<Map<String, Object>> geSourceByStuId(Map<String, Object> paramMap);

    /**
     * 学生报告
     * @description 查询课程所属的知识点
     * @param 课程id的集合
     * */
    List<Map<String, Object>> getKnowpointListBycouId(Map<String, Object> map);

    /**
     * 保存学生报告html
     * param:学生id,reportHtml
     * @return
     * @throws IOException
     */
    boolean saveReportHtmlByStuId(Map<String, Object> paramMap);

    /**
     * 更新保存学生报告html
     * param:学生id,reportHtml
     * @return
     * @throws IOException
     */
    boolean updateReportHtmlByStuId(Map<String, Object> paramMap);

    List<Map<String, Object>> getReportBysIdAndTeaId(Map<String, Object> paramMap);

    List<Map<String, Object>> getTeaReportByTeaId(Map<String, Object> paramMap);


    /**
     * 通过当前学生所学课程id和学号查出当前学生所学课程对应作业信息
     * @description 通过当前学生所学课程id和学号查出当前学生所学课程对应作业信息
     * @param stuorteaId
     * */
   List<Map<String, Object>> getAllTaskByStuIdAndCouId(Map<String,Object> paramMap);

    /**
     *
     * @description 查出当前学生所学课程对应作业信息===对应的知识点信息（这里面有重复数据）
     * @param 课程id的集合
     * */
    List<Map<String, Object>> getKnowpointListByChapterId(Map<String,Object> paramMap);

    /**
     * @description 通过问题主键查询tasklibrary表查每道题的正确答案
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getAllTaskLibraryListById(List<Map<String,Object>> list) throws Exception;

    /**
     * 查询某个学生选课次数
     * @param paramMap stuorteaId
     * @return
     * @throws Exception
     */
     long getCouSelectCout(Map<String,Object> paramMap) throws Exception;

    /**
     * 查询某个学生在线考试次数
     * @param paramMap stuorteaId
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getOnlineExamCount(Map<String,Object> paramMap) throws Exception;

    /**
     * 查询某个学生进入课程次数
     * @param paramMap stuorteaId
     * @return
     * @throws Exception
     */
     List<Map<String,Object>> getSelecCourseCount(Map<String,Object> paramMap) throws Exception;

    /**
     * 通过课程id和学生id和教师id查询当前学生作业or实验报告总分
     * @param paramMap stuorteaId、teaId、courseId、taskType
     * @return
     * @throws Exception
     */
     Map<String,Object> getAllSourceTaskByStuIdAndCouId(Map<String,Object> paramMap) throws Exception;

    /**
     * 通过课程id查询课程所有的章节作业or实验报告实际的总分数
     * @param paramMap courseId、taskType
     * @return
     * @throws Exception
     */
     Map<String,Object> getexecSourceTaskByCouId(Map<String,Object> paramMap) throws Exception;

    /**
     * 通过课程id和学生id查询当前学生这个课时哪个老师教，优的分值是多少
     * @param paramMap courseId、stuId
     * @return
     * @throws Exception
     */
    Map<String,Object> getExcellentSourceByCouId(Map<String,Object> paramMap) throws Exception;


}

